from random import randint
class Puntos():
	def __init__(self):
		self.jug1=-1
		self.jug2=-1
		self.jug3=-1
		self.jug4=-1
		self.jug5=-1
		self.jug6=-1
		self.jug_escalera=-1
		self.jug_full=-1
		self.jug_poker=-1
		self.jug_generala=-1
		self.jug_generalaServida=-1
		
	def jugada1 (self,numero):
		self.jug1=1*numero
		
	def jugada2 (self,numero):
		self.jug2=2*numero
		
	def jugada3 (self,numero):
		self.jug3=3*numero
		
	def jugada4 (self,numero):
		self.jug4=4*numero
		
	def jugada5 (self,numero):
		self.jug5=5*numero	
		
	def jugada6 (self,numero):
		self.jug6=6*numero
		
	def escalera (self):
		self.jug_escalera=20
		
	def full (self):
		self.jug_full=30
	
	def poker (self):
		self.jug_poker=40
	
	def generala (self):
		self.jug_generala=50	
	
	def generalaServida (self):
		self.jug_generalaServida=100
	
	def puntostTotales(self):
		resul="(1)",self.jug1, "(2)",self.jug2,"(3)",self.jug3,"(4)",self.jug4, "(5)",self.jug5,"(6)",self.jug6, "\n","(escalera)",self.jug_escalera, "(full)",self.jug_full, "(poker)",self.jug_poker, "(generala)",self.jug_generala, "(generala Servida)",self.jug_generalaServida
		return resul
	def sinchances(self):
			return True
	def sumaPuntaje(self):
		resul=self.jug1+self.jug2+self.jug3+self.jug4+self.jug5+self.jug6+self.jug_escalera+self.jug_full+self.jug_poker+self.jug_generala+self.jug_generalaServida
		return resul
				
				
class Dados():
	def __init__(self):
		pass
	def azar(self):	
		intentos=1
		lista=[]
		n1=randint(1,6);lista.append(n1)
		n2=randint(1,6);lista.append(n2)
		n3=randint(1,6);lista.append(n3)
		n4=randint(1,6);lista.append(n4)
		n5=randint(1,6);lista.append(n5)
		while True and intentos<4:
			print "posicion dados", lista
			decision= raw_input("desea quedarse con esos dados?: si/no ")
			if decision=="si":
				break
			else:
				deci= input("ingrese cuantos dados va a cambiar: ")
				n=0
				borrar=[]
				while n<deci:
					pos= input("ingrese la posicion para sacar el dado: "); pos=pos-1
					borrar.append(lista[pos])
					n=n+1
				for num in borrar:	
					lista.remove(num)
									
				for numeros in range(deci):
					n=randint(1,6);lista.append(n)		
				intentos=intentos+1
				
		lista.append(intentos)
		return lista
	

class Darresultado():
	def __init__(self, lista,jug,intentos):
		x1=lista.count(1)
		x2=lista.count(2)
		x3=lista.count(3)
		x4=lista.count(4)
		x5=lista.count(5)
		x6=lista.count(6)
		condicion=None
		eleccion=input("decida su juego 1(1),2(2),3(3),4(4),5(5),6(6),poker(7),full(8),escalera(9),generala(10),generala servida(11): ")
			
		if (eleccion==1) and(x1!=0 and jug.jug1==-1):
			jug.jugada1(x1)
		elif (eleccion==2) and(x2!=0 and jug.jug2==-1):
			jug.jugada2(x2)
		elif (eleccion==3) and(x3!=0 and jug.jug3==-1):
			jug.jugada3(x3)
		elif (eleccion==4) and(x4!=0 and jug.jug4==-1):
			jug.jugada4(x4)	
		elif (eleccion==5) and(x5!=0 and jug.jug5==-1):
			jug.jugada5(x5)
		elif (eleccion==6) and(x6!=0 and jug.jug6==-1):
			jug.jugada6(x6)
		elif (eleccion==7) and(x1==4 or x2==4 or x3==4 or x4==4 or x5==4 or x6==4)and(jug.jug_poker==-1):
			jug.poker()
		elif ((eleccion==8) and(x1==3 or x2==3 or x3==3 or x4==3 or x5==3 or x6==3) and (x1==2 or x2==2 or x3==2 or x4==2 or x5==2 or x6==2)and jug.jug_full==-1):
			jug.full()
		elif (eleccion==9) and(1 in lista and 2 in lista and 3 in lista and 4 in lista and 5 in lista)and(jug.jug_escalera==-1):
			jug.escalera()
		elif (eleccion==9) and(2 in lista and 3 in lista and 4 in lista and 5 in lista and 6 in lista)and(jug.jug_escalera==-1):
			jug.escalera()
		elif ((eleccion==10) and (x1==5 or x2==5 or x3==5 or x4==5 or x5==5 or x6==5)and(intentos>1)and(jug.jug_generala)):
			jug.generala()
		elif ((eleccion==11) and(x1==5 or x2==5 or x3==5 or x4==5 or x5==5 or x6==5)and(intentos==1)and(jug.jug_generalaServida)):
			jug.generalaServida()
		else:
			if jug.jug1==-1:
				jug.jug1=0
			elif jug.jug2==-1:
				jug.jug2=0	
			elif jug.jug3==-1:
				jug.jug3=0
			elif jug.jug4==-1:
				jug.jug5=0
			elif jug.jug6==-1:
				jug.jug6=0
			elif jug.jug_escalera==-1:
				jug.jug_escalera=0
			elif jug.jug_full==-1:
				jug.jug_full=0
			elif jug.jug_poker==-1:
				jug.jug_poker=0
			elif jug.jug_generala==-1:
				jug.jug_generala=0
			elif jug.jug_generalaServida==-1:
				jug.jug_generalaServida=0
			else:
				jug.sinchances()
		return	condicion		
											

class Generala():
	def __init__(self, num):
		if num==1:
			jug1=Puntos()
		elif num==2:
			jug1=Puntos()
			jug2=Puntos()
		elif num==3:
			jug1=Puntos()
			jug2=Puntos()
			jug3=Puntos()
			con=False
			con2=False
			con3=False
			while ((jug1.sumaPuntaje()<100 or jug2.sumaPuntaje()<100 or jug3.sumaPuntaje()<100) and (con!=True and con2!=True and con3!=True)):
				jug1dad1=Dados()
				jug1dad1=jug1dad1.azar()
				inten=jug1dad1[-1]
				con=Darresultado(jug1dad1, jug1,inten)
			
				jug2dad2=Dados()
				jug2dad2=jug2dad2.azar()
				inten2=jug2dad2[-1]
				con2=Darresultado(jug2dad2, jug2,inten2)
			
				jug3dad3=Dados()
				jug3dad3=jug3dad3.azar()
				inten3=jug3dad3[-1]
				con3=Darresultado(jug3dad3, jug3,inten3)
				print ""
				print "jugador1 tiene", jug1.puntostTotales(), " en sus anotaciones"
				print ""
				print "jugador2 tiene", jug2.puntostTotales(), " en sus anotaciones"
				print ""
				print "jugador3 tiene", jug3.puntostTotales(), " en sus anotaciones"
				print ""
			print "fin del juego"
			print ""	
			print "suma de puntaje jugador1= ",jug1.sumaPuntaje()
			print ""
			print "suma de puntaje jugador2= ",jug2.sumaPuntaje()
			print ""
			print "suma de puntaje jugador3= ",jug3.sumaPuntaje()
			print ""
			print jug1.sumaPuntaje(),jug2.sumaPuntaje(),jug3.sumaPuntaje(),con,con2,con3
		
		

#Simple uso
numero=input ("ingrese cantidad de jugadores:")#Por ahora solo lo pense con 3 ya vere como resolver lo demas cantidades, seguramente seran con robots
gen=Generala(numero)

